/**
 * 里氏替换原则
 *   父类能出现的地方子类就可以出现，而且替换为子类也不会产出任何错误或异常，
 *   使用者可能根本不需要知道是父类还是子类。
 *   但是反过来不行，有子类出现的地方，父类未必就能适应
 *
 *   里氏替换原则的主要作用如下:
 *      1.里氏替换原则是实现开闭原则的重要方式之一。
 *      2.它克服了继承中重写父类造成的可复用性变差的缺点。
 *      3.它是动作正确性的保证。即类的扩展不会给已有的系统引入新的错误，降低了代码出错的可能性。
 *   里式替换原则注意事项:
 *      1.子类可以实现父类的抽象方法，但是不建议覆盖父类非抽象方法。
 *      2.子类中可以增加自己特有的方法。
 *      3.当子类的方法重载父类的方法时，方法的入参要比父类方法的入参更宽松 （HashMap、Map）
 *      4.当子类重写/重载或者实现抽象方法，方法的返回值要比父类更严格或相等。
 */
package com.wlz.principle.lsp;